home *** CD-ROM | disk | FTP | other *** search
/ PC World 2007 December / PCWorld_2007-12_cd.bin / v cisle / htttrack / httrack-3.41-3.exe / {app} / libtest / example.c < prev    next >
C/C++ Source or Header  |  2006-06-04  |  8KB  |  202 lines

  1. /*
  2.     HTTrack library example
  3.     .c file
  4.  
  5.     Prerequisites:
  6.       - install winhttrack
  7.       - set the proper path in the project settings (especially for the httrack lib and dll)
  8.  
  9.     How to build: (callback.so or callback.dll)
  10.       With GNU-GCC:
  11.         gcc -I/usr/include/httrack -O -g3 -Wall -D_REENTRANT -o example example.c -lhttrack1
  12.       With MS-Visual C++:
  13.         cl -nologo -W3 -Zi -Zp4 -DWIN32 -Fe"mycallback.exe" callbacks-example.c wsock32.lib libhttrack.lib
  14. */
  15.  
  16. #include <stdio.h>
  17. #include <stdlib.h>
  18. #include <string.h>
  19. #ifdef _WIN32
  20. #include <windows.h>
  21. #endif
  22.  
  23. /* Standard httrack module includes */
  24. #include "httrack-library.h"
  25. #include "htsopt.h"
  26. #include "htsdefines.h"
  27.  
  28. /* Local definitions */
  29. #include "example.h"
  30.  
  31. /*
  32.  * Name:           main
  33.  * Description:    main() function
  34.  * Parameters:     None
  35.  * Should return:  error status
  36. */
  37. int main(void) {
  38.   /* 
  39.      First, ask for an URL 
  40.      Note: For the test, option r2 (mirror max depth=1) and --testscan (no index, no cache, do not store, no log files)
  41.   */
  42.   char _argv[][256] = {"httrack_test" , "<URL>" , "-r3" , "--testscan" , ""  };
  43.   char* argv[]      = {NULL           , NULL    , NULL  , NULL        , NULL};
  44.   int         argc = 0;
  45.   httrackp *opt;
  46.     int ret;
  47.   while(strlen(_argv[argc])) {
  48.     argv[argc]=_argv[argc];
  49.     argc++;
  50.   }
  51.   argv[argc]=NULL;
  52.   printf("HTTrackLib test program\n");
  53.   printf("Enter URL (example: www.foobar.com/index.html) :");
  54.   scanf("%s",argv[1]);
  55.   printf("Test: 1 depth\n");
  56.  
  57.     /* Initialize the library */
  58. #ifdef _WIN32
  59.   {
  60.     WORD   wVersionRequested;   // requested version WinSock API
  61.     WSADATA wsadata;            // Windows Sockets API data
  62.     int stat;
  63.     wVersionRequested = 0x0101;
  64.     stat = WSAStartup( wVersionRequested, &wsadata );
  65.     if (stat != 0) {
  66.       printf("Winsock not found!\n");
  67.       return;
  68.     } else if (LOBYTE(wsadata.wVersion) != 1  && HIBYTE(wsadata.wVersion) != 1) {
  69.       printf("WINSOCK.DLL does not support version 1.1\n");
  70.       WSACleanup();
  71.       return;
  72.     }
  73.   }
  74. #endif
  75.   hts_init();
  76.  
  77.     /* Create option settings and set callbacks (wrappers) */
  78.     opt = hts_create_opt();
  79.  
  80.   CHAIN_FUNCTION(opt, init, httrack_wrapper_init, NULL);
  81.   CHAIN_FUNCTION(opt, uninit, httrack_wrapper_uninit, NULL);
  82.   CHAIN_FUNCTION(opt, start, httrack_wrapper_start, NULL);
  83.   CHAIN_FUNCTION(opt, end, httrack_wrapper_end, NULL);
  84.   CHAIN_FUNCTION(opt, chopt, httrack_wrapper_chopt, NULL);
  85.   CHAIN_FUNCTION(opt, preprocess, httrack_wrapper_preprocesshtml, NULL);
  86.   CHAIN_FUNCTION(opt, postprocess, httrack_wrapper_postprocesshtml, NULL);
  87.   CHAIN_FUNCTION(opt, check_html, httrack_wrapper_checkhtml, NULL);
  88.   CHAIN_FUNCTION(opt, query, httrack_wrapper_query, NULL);
  89.   CHAIN_FUNCTION(opt, query2, httrack_wrapper_query2, NULL);
  90.   CHAIN_FUNCTION(opt, query3, httrack_wrapper_query3, NULL);
  91.   CHAIN_FUNCTION(opt, loop, httrack_wrapper_loop, NULL);
  92.   CHAIN_FUNCTION(opt, check_link, httrack_wrapper_check, NULL);
  93.   CHAIN_FUNCTION(opt, check_mime, httrack_wrapper_check_mime, NULL);
  94.   CHAIN_FUNCTION(opt, pause, httrack_wrapper_pause, NULL);
  95.   CHAIN_FUNCTION(opt, filesave, httrack_wrapper_filesave, NULL);
  96.   CHAIN_FUNCTION(opt, filesave2, httrack_wrapper_filesave2, NULL);
  97.   CHAIN_FUNCTION(opt, linkdetected, httrack_wrapper_linkdetected, NULL);
  98.   CHAIN_FUNCTION(opt, linkdetected2, httrack_wrapper_linkdetected2, NULL);
  99.   CHAIN_FUNCTION(opt, xfrstatus, httrack_wrapper_xfrstatus, NULL);
  100.   CHAIN_FUNCTION(opt, savename, httrack_wrapper_savename, NULL);
  101.   CHAIN_FUNCTION(opt, sendhead, httrack_wrapper_sendheader, NULL);
  102.   CHAIN_FUNCTION(opt, receivehead, httrack_wrapper_receiveheader, NULL);
  103.  
  104.   /* Then, launch the mirror */
  105.     ret = hts_main2(argc, argv, opt);
  106.  
  107.   /* Wait for a key */
  108.   printf("\nPress ENTER key to exit\n");
  109.   scanf("%s",argv[1]);
  110.  
  111.     /* Clear option state */
  112.     hts_free_opt(opt);
  113.     hts_uninit();
  114. #ifdef _WIN32
  115.   WSACleanup();
  116. #endif
  117.  
  118.   /* That's all! */
  119.   return 0;
  120. }
  121.  
  122.  
  123. /* CALLBACK FUNCTIONS */
  124.  
  125. /* Initialize the Winsock */
  126. static void CDECL httrack_wrapper_init(t_hts_callbackarg *carg) {
  127.   printf("Engine started\n");
  128. }
  129. static void CDECL httrack_wrapper_uninit(t_hts_callbackarg *carg) {
  130.   printf("Engine exited\n");
  131. }
  132. static int CDECL httrack_wrapper_start(t_hts_callbackarg *carg, httrackp* opt) {
  133.   printf("Start of mirror\n");
  134.   return 1; 
  135. }
  136. static int CDECL httrack_wrapper_chopt(t_hts_callbackarg *carg, httrackp* opt) {
  137.   return 1;
  138. }
  139. static int CDECL httrack_wrapper_end(t_hts_callbackarg *carg, httrackp* opt) { 
  140.   printf("End of mirror\n");
  141.   return 1; 
  142. }
  143. static int CDECL httrack_wrapper_checkhtml(t_hts_callbackarg *carg, httrackp *opt,  char* html,int len,const char* url_address,const char* url_file) {
  144.   printf("Parsing html file: http://%s%s\n",url_address,url_file);
  145.   return 1;
  146. }
  147. static int CDECL httrack_wrapper_loop(t_hts_callbackarg *carg, httrackp *opt,  void* _back,int back_max,int back_index,int lien_n,int lien_tot,int stat_time,hts_stat_struct* stats) {
  148.   /* printf("..httrack_wrapper_loop called\n"); */
  149.   return 1;
  150. }
  151. static const char* CDECL httrack_wrapper_query(t_hts_callbackarg *carg, httrackp *opt,  const char* question) {
  152.   /* Answer is No */
  153.   return "N";
  154. }
  155. static const char* CDECL httrack_wrapper_query2(t_hts_callbackarg *carg, httrackp *opt,  const char* question) {
  156.   /* Answer is No */
  157.   return "N";
  158. }
  159. static const char* CDECL httrack_wrapper_query3(t_hts_callbackarg *carg, httrackp *opt,  const char* question) {
  160.   /* Answer is "" */
  161.   return "";
  162. }
  163. static int CDECL httrack_wrapper_check(t_hts_callbackarg *carg, httrackp *opt,  const char* adr,const char* fil,int status) {
  164.   printf("Link status tested: http://%s%s\n",adr,fil);
  165.   return -1;
  166. }
  167. static void CDECL httrack_wrapper_pause(t_hts_callbackarg *carg, httrackp *opt,  const char* lockfile) {
  168.   /* Wait until lockfile is removed.. */
  169. }
  170. static void CDECL httrack_wrapper_filesave(t_hts_callbackarg *carg, httrackp *opt,  const char* file) {
  171. }
  172. static int CDECL httrack_wrapper_linkdetected(t_hts_callbackarg *carg, httrackp *opt,  char* link) {
  173.   printf("Link detected: %s\n",link);
  174.   return 1;
  175. }
  176. static int CDECL httrack_wrapper_xfrstatus(t_hts_callbackarg *carg, httrackp *opt,  void* back) {
  177.   return 1;
  178. }
  179. static int CDECL httrack_wrapper_preprocesshtml(t_hts_callbackarg *carg, httrackp *opt,  char** html,int* len,const char* url_address,const char* url_file) {
  180.   return 1;
  181. }
  182. static int CDECL httrack_wrapper_postprocesshtml(t_hts_callbackarg *carg, httrackp *opt,  char** html,int* len,const char* url_address,const char* url_file) {
  183.   return 1;
  184. }
  185. static int CDECL httrack_wrapper_check_mime(t_hts_callbackarg *carg, httrackp *opt,  const char* adr,const char* fil,const char* mime,int status) {
  186.   return -1;
  187. }
  188. static void CDECL httrack_wrapper_filesave2(t_hts_callbackarg *carg, httrackp *opt,  const char* adr, const char* fil, const char* save, int is_new, int is_modified,int not_updated) {
  189. }
  190. static int CDECL httrack_wrapper_linkdetected2(t_hts_callbackarg *carg, httrackp *opt,  char* link, const char* start_tag) {
  191.   return 1;
  192. }
  193. static int CDECL httrack_wrapper_savename(t_hts_callbackarg *carg, httrackp *opt,  const char* adr_complete,const char* fil_complete,const char* referer_adr,const char* referer_fil,char* save) {
  194.   return 1;
  195. }
  196. static int CDECL httrack_wrapper_sendheader(t_hts_callbackarg *carg, httrackp *opt,  char* buff, const char* adr, const char* fil, const char* referer_adr, const char* referer_fil, htsblk* outgoing) {
  197.   return 1;
  198. }
  199. static int CDECL httrack_wrapper_receiveheader(t_hts_callbackarg *carg, httrackp *opt,  char* buff, const char* adr, const char* fil, const char* referer_adr, const char* referer_fil, htsblk* incoming) {
  200.   return 1;
  201. }
  202.